A software bug (or simply a “bug”) is an error in a computer program that prevents it from executing as intended. Most bugs arise from programming errors in either the source code or in the design of a program. A computer program that contains a large number of bugs, or bugs that seriously interfere with its functionality, is said to be “buggy.” The process of correcting the bugs in a computer program is referred to as “debugging.”
The efficiency of the debugging process is greatly improved if each bug can be reproduced. Reproducing a bug generated in response to user-driven events requires that the user know the exact sequence of events that were performed that caused the bug to occur. Sometimes a bug results from the culmination of many events happening in a particular sequence that can be nearly impossible for a user to remember. The steps necessary to reproduce a bug are often referred to as the “repro steps.”
To complicate the debugging process even further, the person experiencing the bug may not be the same individual who will attempt to debug the program. Therefore, the person experiencing the bug must be able to convey the sequence of events to the person who will debug the application. Conveying the sequence of events requires not only that the person experiencing the bug recall each of the events, but also that each event be conveyed accurately. If the person forgets a particular user-driven event or forgets the order of events, then the user-driven events will not be adequately reproducible. As a result, the bug may not be corrected.
Previous software solutions exist that are capable of recording user-driven events within an application program. These previous solutions suffer from a number of significant limitations, however, that impact their usefulness. In particular, previous solutions often cannot record user-driven events with respect to user interface (“UI”) controls that do not expose user-driven events using standard methods. Moreover, previous recording solutions do not record user input made into an input method editor (“IME”). An IME is a program or operating system component that allows computer users to enter characters and symbols not found on their keyboard. An IME, for instance, may allow a user of a Western keyboard to input Chinese, Japanese, or Korean characters. Other previous solutions also do not provide integration with a bug tracking database, thereby adding complexity to the process of properly persisting the repro steps.
It is with respect to these considerations and others that the disclosure made herein is presented.